Taas kertaalleen jouduin tekemään uuden testin IP-osoitteille sillä monimutkaisemmat regex:ät tökkivät, BASH_REMATCH ei innosta ja yleensä testit lisäksi vuotavat. Hyvä IP-testi onkin ihan perus-käskyistä väsätty ja sellainen mikä ei päästä läpi mitään jossa on fyysistä vikaa muttei myöskään anna vääriä hälytyksiä:
function ipv4testi () { for n in {0..255}; do echo $1 | grep -w 0*$n; done | [[ $(wc -l) = 4 ]] ;}; ipv4testi 255:0:012:56 && echo ip hyvä || echo ip kelvoton                                     
- testi ei välitä siitä mikä merkki toimii erottimena aliosoitteiden välissä mikä on ehkä hyväkin. Mutta se ei myöskään tarkista onko osoitteessa turhia merkkejä.

Muita mahdollisia toimintoja:
function verifyIP() { local o='(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])'; [[ $1 =~ ^$o\.$o\.$o\.$o$ ]]; }; ipv4testi 255:0:012:56 && echo ip hyvä || echo ip kelvoton 
**   
Täydellinen IPv6-osoite on esimerkiksi: 2001:0db8:0000:0000:0000:ff00:0042:8329 
- siten IPv6-osoitteessa voi olla korkeintaan 7kpl :-merkkien eroittamaa ryhmää ja hexdigitejä kussakin ryhmässä korkeintaan 4
- ryhmiä eroittava merkki on aina : joten muita merkkejä ei saa olla kuin : ja hexdigit:ejä
- osoitteen perässä on usein ryhmäviite, esim: /128

IPv6-osoiteen tarkistamisessa yhdistetään nuo neljä vaatimusta:
function ipv6testi () { [[ $(echo $1|tr -d :/[[:xdigit:]]) = '' && $(echo $1|tr -dc :|wc -c)<7 && $(echo $1|grep -o '[[:xdigit:]]*'|wc -L)<5 ]] && echo osoite on kelvollinen;}; ipv6testi ::1/128
- siis tuon: 9901:0db8::ff:42:29 tilalle kirjoitetaan testattava ipv6-osoite
- huomioi että vain fyysiset virheet selviävät näin ja loogiset virheet jäävät; samoin tekstissä saattaa olla kyse jostain ihan muusta kuin ipv6-osoitteesta. 

- ipv6-osoitteet jotka koneesi tuntee: ip -6 addr

Tarkistuksessa täytyy lisäksi huomioida:
- jokaisesta ryhmastä etunollat voi poistaa: 2001:db8:0:0:0:ff00:42:8329
- perättäiset 0:t voi yhdistää kahdeksi :-merkiksi: 2001:db8::ff00:42:8329
- esimerkiksi loop-back osoite: 0000:0000:0000:0000:0000:0000:0000:0001 voidaan kirjoittaa ::1
**
Koneesi ipv6-osoitteet saat käskyllä: ip -6 addr   

Kun saat käsiisi jotain jonka pitäisi olla ipv6-osoite voit testata sen käskyllä:
function ipv6testi () { [[ $(echo $1|tr -d :/[[:xdigit:]]) = '' && $(echo $1|tr -dc :|wc -c)<7 && $(echo $1|grep -o '[[:xdigit:]]*'| \
wc -L)<5 ]] && echo osoite on kelvollinen || echo osoite on kelvoton ;}; ipv6testi 1::1111:1/128 # esimerkkiosoite

ipv6 regex: echo fe80::762f:68ff:fee4:267c  | grep -P '^\s*(?>(?>([a-f0-9]{1,4})(?>:(?1)){7}|(?!(?:.*[a-f0-9](?>:|$)){8,})((?1)(?>:(?1)){0,6})?::(?2)?)|(?>(?>(?1)(?>:(?1)){5}:|(?!(?:.*[a-f0-9]:){6,})(?3)?::(?>((?1)(?>:(?1)){0,4}):)?)?(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])(?>\.(?4)){3}))\s*$'

